package edu.server.dominio;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import edu.server.repositorio.MedidaFijaProducto;
import edu.server.util.HibernateUtil;

public class D_MedidaFijaProducto {
	
	public D_MedidaFijaProducto()
	{
		
	}
	
	/**
	 * Método que busca en la base de datos todas las medidas fijas de producto cargadas
	 * @return una lista de medidas fija de producto
	 */
	@SuppressWarnings("unchecked")
	public List<MedidaFijaProducto> buscarMedidasFijaProducto()
	{
		List<MedidaFijaProducto> medidasFijaProducto;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		String hql = "From MedidaFijaProducto";
		
		Query query = session.createQuery(hql);
		
		medidasFijaProducto = query.list();
		
		session.close();
		
		return medidasFijaProducto;
	}
	
	/**
	 * Método que busca en la base de datos la medida fija de producto que tiene la medida pasada como parámetro.
	 * @param medida. Medida que tiene la medida fija de producto a buscar.
	 * @return MedidaFijaProducto. Retorna la medida fija de producto que tiene la medida fija pasada como parámetro.
	 */
	public MedidaFijaProducto buscarMedidaFija(String medida)
	{
		MedidaFijaProducto medidaFija;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		medidaFija = (MedidaFijaProducto) session.createQuery("FROM MedidaFijaProducto WHERE medida LIKE '" + medida + "'").uniqueResult();
		
		session.close();
		
		return medidaFija;
	}
	
	/**
	 * Método que busca en la base de datos la medida fija de producto para los parámetros pasados.
	 * @param codigoClase
	 * @param codigoElemento
	 * @param codigoMaterial
	 * @return List<MedidaFijaProducto>. Retorna una lista con todas las medidas fijas pasadas para el parámetro.
	 */
	@SuppressWarnings("unchecked")
	public List<MedidaFijaProducto> buscarMedidasFijasProducto(int codigoClase, int codigoElemento, int codigoMaterial) {
		
		List<MedidaFijaProducto> medidasFijas;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		medidasFijas = session.createQuery("SELECT DISTINCT P.medidaFijaProducto FROM Producto P" +
											" WHERE P.elementoProducto.id.codigoClaseProducto = " + codigoClase +
											" AND P.elementoProducto.id.codigoElementoProducto = " + codigoElemento +
											" AND P.materialProducto.codigoMaterialProducto = " + codigoMaterial).list();
		
		session.close();
		
		return medidasFijas;
		
	}
}
